const path = require('path');
const webpack = require('webpack');
let scssVariables = require('./src/theme/variables.scss.js');
const CopyWebpackPlugin = require('copy-webpack-plugin'); // 最新版本copy-webpack-plugin插件暂不兼容，推荐v5.0.0

module.exports = {
	publicPath: './src', // 使用相对路径打包
	css: {
		requireModuleExtension: true,
		loaderOptions: {
			// 给 sass-loader 传递选项
			sass: {
				// @/ 是 src/ 的别名
				// 所以这里假设你有 `src/variables.sass` 这个文件
				// 注意：在 sass-loader v8 中，这个选项名是 "prependData"
				// prependData: `@import "@/uni.scss";`,
				// 相当于@import"./src/assets/scss/global.scss"
				prependData: Object.keys(scssVariables).map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`).join('\n'),
			},
			// 默认情况下 `sass` 选项会同时对 `sass` 和 `scss` 语法同时生效
			// 因为 `scss` 语法在内部也是由 sass-loader 处理的
			// 但是在配置 `prependData` 选项的时候
			// `scss` 语法会要求语句结尾必须有分号，`sass` 则要求必须没有分号
			// 在这种情况下，我们可以使用 `scss` 选项，对 `scss` 语法进行单独配置
			scss: {
				// additionalData: `@import "src/uni.sass"`
				// prependData: `@import "@/src/uni.scss";`
				prependData: Object.keys(scssVariables).map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`).join('\n'),
			},
			// 给 less-loader 传递 Less.js 相关选项
			less: {
				// http://lesscss.org/usage/#less-options-strict-units `Global Variables`
				// `primary` is global variables fields name
				// globalVars: {
				//     primary: '#fff'
				// }
			},
		},
	},
	lintOnSave: false,
	configureWebpack: {
		plugins: [
			new CopyWebpackPlugin([{
					from: path.join(__dirname, 'src/mock'),
					to: path.join(__dirname, 'dist', process.env.NODE_ENV === 'development' ? 'dev' : 'build', process.env.UNI_PLATFORM, 'mock'),
				},
				{
					from: path.join(__dirname, 'src/pdf'),
					to: path.join(__dirname, 'dist', process.env.NODE_ENV !== 'production' ? 'dev' : 'build', process.env.UNI_PLATFORM, 'pdf'),
				},
			]),
			new webpack.DefinePlugin({
				// 在客户端包中将hotRequire替换成require
				'hotRequire': 'require',
				// 在客户端包中将hotRequireContext替换成require.context（必须替换，不能只替换hotRequire）
				'hotRequire.context': 'require.context',
			})
		]
	},
};